/**
 * Created by Administrator on 2018/10/29 0029.
 */
//---------------------------------------------------------策略表格控制器 用于显示 以及配置策略参数  用户手数等操作
loginapp.controller("strategTableCtrl", ['$scope', '$element', '$http', 'NgTableParams', 'stragegTalbedateService', 'userinfoTalbedateService', function ($scope, $element, $http, NgTableParams, simpleList, userList) {
    /*
     * current:                 列表当前页
     * current_count:           列表当前页显示条数
     * self.checkboxes.checked: 全选
     * self.checkboxes.items:   当前选中个数用json形式保存
     * simpleList:              表格数据
     * */
    $scope.simplieList = simpleList          //绑定tabledate数据  因为这里是异步调用 所以需要改变html页面的table的构造方法

    //策略table  展示部分  --------------------------------------------------------------------
    var self = this
    self.checkboxes = {
        checked: false,
        items: {}
    }
    // self.tableParams = new NgTableParams(
    //     {count: 20},
    //     {counts: [20, 40], dataset: simpleList}
    // );
    // watch for check all checkbox 全选按钮监控事件  监控事件变化
    $scope.$watch(function () {
        return self.checkboxes.checked;
    }, function (value) {
        angular.forEach(simpleList, function (item) {
            self.checkboxes.items[item.id] = value;
        });
    });

    // watch for data checkboxes 监控每个对象变化
    $scope.$watch(function () {
        return self.checkboxes.items;
    }, function (values) {
        var checked = 0, unchecked = 0,
            total = simpleList.length;
        angular.forEach(simpleList, function (item) {
            checked += (self.checkboxes.items[item.id]) || 0;
            unchecked += (!self.checkboxes.items[item.id]) || 0;
        });
        if ((unchecked == 0) || (checked == 0)) {
            self.checkboxes.checked = (checked == total);
        }

        // grayed checkbox
        angular.element($element[0].getElementsByClassName("select-all")).prop("indeterminate", (checked != 0 && unchecked != 0));
        //console.log(values);
    }, true);


    //--------------------------------------------------------------------------------------------------------------------------------------------


    //对话框部分展示  --------------------------------------------------------------------------------------------------------


    //点击配置按钮以后弹开对话框

    originalData = angular.copy(userList);//得到所有用户信息
    self.DialogtableParams = new NgTableParams({count: 5}, {counts: [5, 10, 15]});
    //self.DialogtableParams = new NgTableParams({count: 5}, {counts: [5, 10, 15]});

    $scope.peiZhi = function (row) {
        temporiginalData = {};    //临时构建出来仓位管理
        $scope.dialog_strategies_params_text = angular.toJson(row.Params);  //row.Params是对象   所以需要把对象转换为字符串便于显示当前选中参数   这个地方已经变成全局变量了
        $scope.select_strategies_dialog = row   //当前选中的策略对象          这个地方已经变成全局变量了
        //originalData[0].name=$scope.select_strategies_dialog.Investors['xiangke'];
        console.log(originalData)
        if ($scope.select_strategies_dialog != undefined) {
            for (i in originalData) {
                originalData[i].shoushu = 0
                for (j in $scope.select_strategies_dialog.Investors) {
                    if (originalData[i].username == j) {        //如果当前用户策略里面配置的有  那么手数字段变成策略配置的数量
                        originalData[i].shoushu = $scope.select_strategies_dialog.Investors[j]
                    }
                }
            }
        }
        temporiginalData = angular.copy(originalData);
        $('#dialogstrategyconfig').modal('show');   //显示模式对话框


        //$('#identifier').modal('hide')   //关闭          模式对话框教程以及各种事件的绑定以及方式    http://www.runoob.com/bootstrap/bootstrap-modal-plugin.html
        //var instance = angular.element(document.getElementById('strategyconfig')).scope();  //一种跨controller的通讯方式 简单方便
    };


    //模式对话框show事件暂时没有用处
    $('#dialogstrategyconfig').on('show.bs.modal', function () {
        console.log('出来了');
    })

    //模式对话框隐藏事件

    $('#dialogstrategyconfig').on('hide.bs.modal', function () {
        self.isEditing = false;   //任何时候如果模式对话框隐藏    就把编辑模块设置为不可编辑状态
        self.DialogtableParams.settings({
            dataset: originalData
        })
    })


    //初始化绑定edittable 数据
    self.DialogtableParams.settings({
        dataset: originalData
    });


    //绑定edittable事件
    self.cancelChanges = cancelChanges;   //绑定取消编辑事件（点击编辑之后出现的小x  这个是点击x出现的）
    self.hasChanges = hasChanges;       //绑定  进入编辑模式
    self.saveChanges = saveChanges;    //绑定  保存事件

    //取消编辑
    function cancelChanges() {
        // console.log('取消编辑');
        resetTableStatus();
        self.DialogtableParams.settings({
            dataset: angular.copy(temporiginalData)
        })

    }

    //进入编辑模式
    function hasChanges() {
        return self.tableForm.$dirty || self.deleteCount > 0
    }

    //重置用户手数配置表格
    function resetTableStatus() {
        // console.log("取消重置form")
        self.isEditing = false;
        self.tableForm.$setPristine();
    }

    //保存交易手数从新配置的数据
    function saveChanges() {
        resetTableStatus();  //重置form
        // var currentPage = self.tableParams.page();
        originalData = angular.copy(self.DialogtableParams.settings().dataset);   //得到当前editable的数据对象（已经改变的用户手数配置信息）、


        investors = {}                                                             //得到新生成的对象以及手数
        $scope.select_strategies_dialog.Investors = {}                       //清空选择的用户对象的手数配置信息 等于初始为空
        for (i in originalData) {                                              //遍历所有的editable数据对象
            if (originalData[i].shoushu > 0) {                                   //如果当前数据对象的手数大于0
                investors[originalData[i].username] = Number(originalData[i].shoushu)
            }
        }

        $http.get("updateStraParasm", {          //对后台进行手数保存
            params: {"id":$scope.select_strategies_dialog.id,"paramsname":'Investors',"params": investors}
        }).success(function (data) {
            $scope.select_strategies_dialog.Investors = investors;    //那么就复制到策略对象的手数上去
        }).error(function () {
            console.log("程序错误 赶紧调试！")
        });


    }


    //保存参数按钮
    $scope.saveParams = function () {
        //保存参数  后台 停止策略
        //          前台 停止策略
        $http.get("updateStraParasm", {
            params: {"id": $scope.select_strategies_dialog.id,"paramsname":'Params', "params": $scope.dialog_strategies_params_text}
        }).success(function (data) {
            $scope.select_strategies_dialog.Params = angular.fromJson($scope.dialog_strategies_params_text)
            //初始化的时候初始状态
            $scope.select_strategies_dialog.status = "未加载";
            $scope.select_strategies_dialog.statusClass = "label label-warning";

            showPopover($("#saveParamsbuttonid"), "数据已经保存");   //公共工具代码 提示对话框插件    函数在module.js
        }).error(function () {
            console.log("程序错误 赶紧调试！")
        });

    }


    //----------------------------------------------------------------------------------------------------------------------------------上面是对话框方法结束


    //删除策略事件
    $scope.zdTableRemove = function (item, $event) {
        $http.get("deletestra", {
            params: {"id": item.id}
        }).success(function (data) {
            for (i in simpleList) {                    //遍历service list进行查找
                if (simpleList[i].id == item.id) {   //如果删除的id是当前的id
                    simpleList.splice(i, 1);                //从service list里面删除这个对象  因为后台已经删除过了
                    break;
                }
            }
        }).error(function () {
            console.log("程序错误 赶紧调试！")
        });
    }
    //显示详细k线以及盈亏情况
    $scope.showK = function (item, $event) {
        if (item.statusClass != "未加载") {
            //window.open('{{url_for("showk")}}?straid' + item.id);    //传参数 不会传   只用变相用这个方法了
            window.open("showk?straid=" + item.id)
        }

    };


    //----------------------------------------------------------------------------------------------------策略控制单元   加载 启动  停止等
    //加载策略
    $scope.allLoad = function () { //加载策略

        selectlist = []
        selectlist = returnSelectList(self.checkboxes.items)   //在公共函数里面
        $http.get("allLoad", {
            params: selectlist//传选中id的数组
        }).success(function (data) {
            console.log(JSON.stringify(data))
            returList = returnsimpleList(selectlist, simpleList)
            for (i in returList) {
                simpleList[returList[i]].status = '已加载';
                simpleList[returList[i]].statusClass = "label label-primary";
                simpleList[returList[i]].Position = data["position"][returnlist[i]];
            }
        }).error(function () {
            console.log('程序错误 赶紧调试！');
        });
    };

    //启动策略
    $scope.alltrading = function (status) {//启动策略

        selectlist = returnSelectList(self.checkboxes.items)   //在公共函数里面  返回所有选择的id
        pars = selectlist
        pars.status = status;
        console.log(pars);
        $http.get("alltrading", {
            params: pars//传送选中id的数据组
        }).success(function (data) {
            if (data.messages == "") {
                returnlist = returnsimpleList(selectlist, simpleList)  //查找符合调价条件的id 并返回到数组里面
                for (i in returnlist) {                      //把所有符合条件的对象根据需求设置
                    if (status == 'True') {
                        simpleList[returnlist[i]].status = '已启动';
                        simpleList[returnlist[i]].statusClass = "label label-success";
                        $scope.messageText = "已经成功启动所选策略";
                    } else {
                        simpleList[returnlist[i]].status = '已加载';
                        simpleList[returnlist[i]].statusClass = "label label-primary";
                        $scope.messageText = "已经成功停止所选策略";
                    }
                }
            } else {
                $scope.messageText = data.messages;
            }
        }).error(function () {
            console.log('程序错误了,赶紧调试');
        });
    }


}]);
